package com.loong.web.gp4j.dao.user;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.loong.web.gp4j.bean.schema.user.UserAuthSchema;
import com.loong.web.gp4j.bean.schema.user.UserDetailSchema;
import com.loong.web.gp4j.bean.schema.user.UserSchema;

/**
 * 用户事务
 *
 * @author 张成轩
 */
@Repository
public class UserTrans {

	@Resource
	private UserDao userDao;
	@Resource
	private UserDetailDao userDetailDao;
	@Resource
	private UserAuthDao userAuthDao;

	/**
	 * 插入用户信息事务
	 * 
	 * @param user 用户
	 * @param detail 用户详情
	 * @param auths 用户权限集
	 * @return 用户插入数量
	 */
	@Transactional
	public int insert(UserSchema user, UserDetailSchema detail, List<UserAuthSchema> auths) {

		// 用户信息
		int count = userDao.insert(user);
		// 用户详情
		detail.setUserId(user.getId());
		userDetailDao.insert(detail);
		// 用户权限
		for (UserAuthSchema auth : auths) {
			auth.setUserId(user.getId());
			userAuthDao.insert(auth);
		}
		return count;
	}

	/**
	 * 更新用户信息事务
	 * 
	 * @param user 用户
	 * @param detail 用户详情
	 * @param auths 用户权限集
	 * @return 用户详情更新数量
	 */
	@Transactional
	public int update(UserSchema user, UserDetailSchema detail, List<UserAuthSchema> auths) {

		// 用户信息
		int count = userDao.update(user);
		// 用户详情
		if (detail.getId() == null)
			userDetailDao.insert(detail);
		else
			userDetailDao.update(detail);
		// 用户权限
		userAuthDao.deleteByUserId(user.getId());
		for (UserAuthSchema auth : auths)
			userAuthDao.insert(auth);
		return count;
	}
}
